package com.itfreer.gis.map.style.transfer;

import java.util.LinkedHashMap;
import java.util.Map;

class MbArcLayer {
    /**
     * 获取wms图层的source对象
     */
    static Map<String, Object> WMS(Map<String, Object> source) {
        int tileSize = source.get("tileSize") == null ? 256 : (int)source.get("tileSize");
        int maxzoom = source.get("maxzoom") == null ? 22 : (int)source.get("maxzoom");
        int minzoom = source.get("minzoom") == null ? 0 : (int)source.get("minzoom");
        String scheme = source.get("scheme") == null ? "xyz" : (String)source.get("scheme");
        boolean urlComlete = source.get("urlComlete") == null ? false : (boolean)source.get("urlComlete");
        String layerName = source.get("layerName") == null ? "" : source.get("layerName").toString();
        String url = source.get("url").toString();
        url = urlComlete ? url : url + "?" // 注:是Arcgis WMS地图服务地址
                + "version=1.3.0" // wms的版本。如果是 1.1.0、1.1.1，则下面的crs参数要改成srs
                + "&request=GetMap" // 调用的方法名称，获取地图必须是这个方法
                //+ "&BGCOLOR=ff00ff" // 生成的图片背景颜色
                + "&layers=" + layerName
                //layers 使用ArcGIS进行发布的时候默认图层名称为0，1，2的索引值，在发布地图服务的时候可以勾选
                //“使用地图文档中的图层名称”，在访问的时候图层名称就是地图上图层名称，不然就是0，1，2，3的索引值
                + "&service=WMS"
                + "&styles=" // 图层显示样式，同样多个样式名称间用，隔开；
                + "&crs=EPSG:3857"
                + "&bbox={bbox-epsg-3857}" // 使用mapbox加载的wms的时候，使用这个标识来同步要获取地图的范围的坐标，必须为这个值
                + "&width=" + tileSize // 返回的图片的大小
                + "&height=" + tileSize // 返回的图片的大小
                + "&format=image/png" // 返回的图片格式
                + "&TRANSPARENT=TRUE"; // 设置背景是不是可以透明，没有数据的地方就进行透明
        // + "&SLD=http://120.77.2.35:8090/lw_base_mapbox.sld"//客户端可以自定义各个图层显示的样式，该文件定义各个图层显示样式
        // 在使用ArcGIS发布服务的时候 ，可以设置“SLD 路径或 URL”来指定样式文件，这样默认显示样式就按照该样式文件进行显示:
        LinkedHashMap<String, Object> mbSource = new LinkedHashMap<>();
        mbSource.put("type", "raster");
        mbSource.put("tileSize", tileSize);
        mbSource.put("tiles", new String[] { url });
        mbSource.put("maxzoom", maxzoom);
        mbSource.put("minzoom", minzoom);
        mbSource.put("scheme", scheme);
        return mbSource;
    }

    /**
     * 获取WMTS图层的source组装对象
     */
    static Map<String, Object> WMTS(Map<String, Object> source) {
        int tileSize = source.get("tileSize") == null ? 256 : (int)source.get("tileSize");
        int maxzoom = source.get("maxzoom") == null ? 22 : (int)source.get("maxzoom");
        int minzoom = source.get("minzoom") == null ? 0 : (int)source.get("minzoom");
        String scheme = source.get("scheme") == null ? "xyz" : (String)source.get("scheme");
        boolean urlComlete = source.get("urlComlete") == null ? false : (boolean)source.get("urlComlete");
        String url = source.get("url").toString();
        url = urlComlete ? url : url + "/WMTS?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible" +
                "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}";
        LinkedHashMap<String, Object> mbSource = new LinkedHashMap<>();
        mbSource.put("type", "raster");
        mbSource.put("tileSize", tileSize);
        mbSource.put("tiles", new String[] { url });
        mbSource.put("maxzoom", maxzoom);
        mbSource.put("minzoom", minzoom);
        mbSource.put("scheme", scheme);
        return mbSource;
    }

    /**
     * 获取TMS图层
     */
    static Map<String, Object> TMS(Map<String, Object> source) {
        boolean urlComlete = source.get("urlComlete") == null ? false : (boolean)source.get("urlComlete");
        String url = source.get("url").toString();
        url = urlComlete ? url : url + "/tile/{z}/{y}/{x}.pbf";
        int maxzoom = source.get("maxzoom") == null ? 22 : (int)source.get("maxzoom");
        int minzoom = source.get("minzoom") == null ? 0 : (int)source.get("minzoom");
        String scheme = source.get("scheme") == null ? "tms" : (String)source.get("scheme");

        LinkedHashMap<String, Object> mbSource = new LinkedHashMap<>();
        mbSource.put("type", "vector");
        mbSource.put("tiles", new String[] { url });
        mbSource.put("maxzoom", maxzoom);
        mbSource.put("minzoom", minzoom);
        mbSource.put("scheme", scheme);
        return mbSource;
    }

    /**
     * 获取wfs图层
     */
    static Map<String, Object> WFS(Map<String, Object> source) {
        return null;
    }
}
